<?php

/*** Abrir una conexión a la base de datos ***/
function abrirConexionBD()
{
  $servidorBaseDatos     = "localhost";
  $nombreBaseDatos       = "hegeprosoft";
  $usuarioBaseDatos      = "jeantech";
  $claveBaseDatos        = "jeantech";
  $puertoBaseDatos       = "5432";
  define(SQL_ASSOC, PGSQL_ASSOC);

  $conexion = pg_connect("dbname=$nombreBaseDatos host=$servidorBaseDatos port=$puertoBaseDatos user=$usuarioBaseDatos password=$claveBaseDatos");
  //pg_query('SET SESSION DATESTYLE TO SQL, DMY');
  return $conexion;
}

/*** Cerrar una conexión establecida con la base de datos ***/
function cerrarConexionBD($conexion)
{
    $cierre = pg_close($conexion);
    return $cierre;
}

/*** Ejecutar una consulta en la base de datos ***/
function consultaBD($consulta,$imprimirConsulta=false)
{
  if($imprimirConsulta==true)
    debug($consulta,"consultaBD=>");
  $resultado = pg_query($consulta);
  return $resultado;
}


/*** Convertir los datos de una fila resultado de una consulta en arreglo ***/
function filaEnArreglo($resultado, $result_type = PGSQL_BOTH)
{
    $fila = pg_fetch_array($resultado, NULL, $result_type);
    return $fila;
}

function consultarCampo($sql, $debug = false)
{
  if(is_string($sql)) // se deja por compatibilidad
    $rs = consultaBD($sql, $debug);
  else
    $rs = $sql;
  if($arreglo = filaEnArreglo($rs))
    return $arreglo[0];
  return null;
}

/*** Devuelve los campos de un registro en un arreglo ***/
function consultarCampos($sql, $debug = false)
{
  if(is_string($sql)) // se deja por compatibilidad
    $rs = consultaBD($sql, $debug);
  else
    $rs = $sql;

  if($arreglo = filaEnArreglo($rs))
    return $arreglo;
  return null;
}


function insert($tabla, $campos, $debug = false)
{
  $sql = "INSERT INTO \"$tabla\" (\"".implode("\",\"",array_keys($campos))."\") VALUES";

  $camposSQL = array();
  foreach($campos as $v)
  {
    if(is_null($v))
      $camposSQL[] = "NULL";
    elseif(is_int($v) || is_float($v))
      $camposSQL[] = $v;
    elseif(is_string($v))
      $camposSQL[] = "'".pg_escape_string($v)."'";
    elseif(is_bool($v))
    {
      if($v === false)
        $camposSQL[] = 'FALSE';
      elseif($v === true)
        $camposSQL[] = 'TRUE';
    }
  }

  $sql .= "(".implode(", ", $camposSQL).")";
  return consultaBD($sql, $debug);
}

function update($tabla, $campos,$where, $debug = false)
{
  $sql = "UPDATE \"$tabla\" SET ";

  $camposSQL = array();
  foreach($campos as $k => $v)
  {
    if(is_null($v))
      $camposSQL[$k] = "NULL";
    elseif(is_int($v) || is_float($v))
      $camposSQL[$k] = $v;
    elseif(is_string($v))
      $camposSQL[$k] = "'".pg_escape_string($v)."'";
    elseif(is_bool($v))
    {
      if($v === false)
        $camposSQL[$k] = 'FALSE';
      elseif($v === true)
        $camposSQL[$k] = 'TRUE';
    }
  }

  foreach($camposSQL as $k => $v)
    $sql .= "$k = $v, ";

  $sql = substr($sql,0,-2);// quitar la ultima coma
  $sql .=' WHERE ';

  $camposSQL = array();
  if(is_array($where))
  {
    foreach($where as $k => $v)
    {
      if(is_null($v))
        $camposSQL[] = $k.' IS NULL';
      elseif(is_int($v) || is_float($v))
        $camposSQL[] = $k.' = '.$v;
      elseif(is_string($v))
        $camposSQL[] = $k.' = \''.pg_escape_string($v)."'";
      elseif(is_bool($v))
      {
        if($v === false)
          $camposSQL[] = $k.' = FALSE';
        elseif($v === true)
          $camposSQL[] = $k.' = TRUE';
      }
    }
    $sql .= implode(' AND ', $camposSQL);
  }
  else
    $sql .= $where;

  return consultaBD($sql, $debug);
}


function sqldelete($tabla, $campos = 'TRUE', $debug = false)
{

  $sql = 'DELETE FROM "'.$tabla.'" WHERE ';

  $camposSQL = array();
  if(is_array($campos))
  {
    foreach($campos as $k => $v)
    {
      if(is_null($v))
        $camposSQL[] = $k.' IS NULL';
      elseif(is_int($v) || is_float($v))
        $camposSQL[] = $k.' = '.$v;
      elseif(is_string($v))
        $camposSQL[] = $k.' = \''.pg_escape_string($v)."'";
      elseif(is_bool($v))
      {
        if($v === false)
          $camposSQL[] = $k.' = FALSE';
        elseif($v === true)
          $camposSQL[] = $k.' = TRUE';
      }
    }
    $sql .= implode(' AND ', $camposSQL);
  }
  else
    $sql .= $campos;

  return consultaBD($sql, $debug);
}

function sqlselect($campos, $tablas = '', $where = 'TRUE',$debug=false)
{
  $sql = 'SELECT ';
  if(is_array($campos))
    $sql .= implode(', ', $campos);
  else
    $sql .= $campos;

  $sql .= ' FROM ';

  if(is_array($tablas))
    $sql .= implode(', ', $tablas);
  else
    $sql .= $tablas;

  $sql .= ' WHERE ';
  $camposSQL = array();
  if(is_array($where))
  {
    foreach($where as $k => $v)
    {
      if(is_null($v))
        $camposSQL[] = $k.' IS NULL';
      elseif(is_int($v) || is_float($v))
        $camposSQL[] = $k.' = '.$v;
      elseif(is_string($v))
        $camposSQL[] = $k.' = \''.pg_escape_string($v)."'";
      elseif(is_bool($v))
      {
        if($v === false)
          $camposSQL[] = $k.' = FALSE';
        elseif($v === true)
          $camposSQL[] = $k.' = TRUE';
      }
    }
    $sql .= implode(' AND ', $camposSQL);
  }
  else
    $sql .= $where;

  $rs = consultaBD($sql,$debug);
  return $rs;
}

function select($campos, $tablas = '', $where = 'TRUE',$debug=false)
{
  $rs = sqlselect($campos, $tablas, $where, $debug);
  if($arreglo = filaEnArreglo($rs))
    return $arreglo;
  else
    return null;
}


function where($conds)
{
  $camposSQL = array(  );
  $sql = '';
  foreach($conds as $k => $v)
  {
    if(is_null($v))
      $camposSQL[] = $k.' IS NULL';
    elseif(is_int($v) || is_float($v))
      $camposSQL[] = $k.' = '.$v;
    elseif(is_string($v))
      $camposSQL[] = $k.' = \''.pg_escape_string($v)."'";
    elseif(is_bool($v))
    {
      if($v === false)
        $camposSQL[] = $k.' = FALSE';
      elseif($v === true)
        $camposSQL[] = $k.' = TRUE';
    }
    elseif(is_array($v))
      $camposSQL[] = $k.' IN ('.implode(', ', array_map('pg_escape_string', $v)).')';
  }
  $sql .= implode(' AND ', $camposSQL);
  return $sql;
}


function sqlEscape($variable)
{
  if(is_string($variable))
    return pg_escape_string($variable);
  else
    return $variable;
}

function IoU($tabla,$campos,$camposWhere,$id=array(),$debug=false)
//function IoU($tabla,$campos,$camposWhere,$debug=false)
{
  if(filasDevueltas(sqlselect('1',$tabla,$camposWhere,$debug))>0)
    return update($tabla,$campos,$camposWhere,$debug);
  else
    return insert($tabla,$camposWhere+$campos,$debug);
}

function consultar2Columnas($sql,$columna=0,$debug = false)
{
  if(is_string($sql)) // se deja por compatibilidad
    $rs = consultaBD($sql, $debug);
  else
    $rs = $sql;
  $arreglo = array();
  while($fila = filaEnArreglo($rs))
  {
    $arreglo[$fila[0]] = $fila[$columna];
  }
  return $arreglo;
}